//返回一个Promise实例
//那就意味着我们把此Promise实例传递给了store.dispatch(promise)
//当我们添加了redux-promise中间件之后，当我们store.dispatch(promise)
//promise中间件会拦截这个action，等待promise完成，等promise完成之后
//获取成功的值，也就是resolve方法的参数，再次进行派发这个值
// 我们有一个原始的派发函数store.dispatch
const  oldDispatch = (action)=>{
    if(Object.getPrototypeOf(action)!==Object.prototype){
        throw new Error('action必须是纯对象');
    }
    console.log('+1',action)
}        
let promise = new Promise((resolve,reject)=>{
    setTimeout(()=>{
     resolve({type:'ADD'});
    },1000)
});
//当我们添加了redux-promise中间件之后
const dispatch = (action)=>{
    //如果action是一个Promise的话，可以指定成功的回调
    if(action instanceof Promise){
        action.then((value)=>{
            dispatch(value);//dispatch({type:actionTypes.ADD})
        });
    }else{
        oldDispatch(action)
    }
}
dispatch(promise);